package com.ruoyi.file.utils;

import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;

/**
 * 文件URL处理工具类
 * 统一处理文件URL相关的操作
 *
 * @author ruoyi
 */
@Slf4j
public class FileUrlUtils {

    /**
     * 从文件URL中提取文件路径
     *
     * @param fileUrl 文件URL
     * @return 文件路径，如果解析失败则返回null
     */
    public static String extractFilePathFromUrl(String fileUrl) {
        if (StringUtils.isEmpty(fileUrl)) {
            return null;
        }
        
        // 如果URL包含域名，提取路径部分
        if (fileUrl.startsWith("http")) {
            try {
                java.net.URL url = new java.net.URL(fileUrl);
                String path = url.getPath();
                // 去掉开头的斜杠和可能的桶名前缀
                if (path.startsWith("/")) {
                    path = path.substring(1);
                }
                // 如果路径包含profile前缀（本地存储），去掉它
                if (path.startsWith("profile/")) {
                    path = path.substring(8);
                }
                return path;
            } catch (Exception e) {
                log.warn("解析文件URL失败: {}", e.getMessage());
                return null;
            }
        } else {
            // 如果是相对路径，直接返回
            String path = fileUrl.startsWith("/") ? fileUrl.substring(1) : fileUrl;
            // 如果路径包含profile前缀，去掉它
            if (path.startsWith("profile/")) {
                path = path.substring(8);
            }
            return path;
        }
    }

    /**
     * 检查URL是否为默认头像
     *
     * @param avatarUrl 头像URL
     * @return true表示是默认头像
     */
    public static boolean isDefaultAvatar(String avatarUrl) {
        if (StringUtils.isEmpty(avatarUrl)) {
            return true;
        }
        return avatarUrl.contains("default") || avatarUrl.contains("avatar/default");
    }

    /**
     * 检查URL是否为有效的文件URL
     *
     * @param fileUrl 文件URL
     * @return true表示是有效的文件URL
     */
    public static boolean isValidFileUrl(String fileUrl) {
        if (StringUtils.isEmpty(fileUrl)) {
            return false;
        }
        
        // 检查是否为HTTP URL或相对路径
        return fileUrl.startsWith("http") || fileUrl.startsWith("/") || 
               (!fileUrl.contains("://") && fileUrl.contains("."));
    }

    /**
     * 标准化文件URL路径
     *
     * @param filePath 文件路径
     * @return 标准化后的路径
     */
    public static String normalizePath(String filePath) {
        if (StringUtils.isEmpty(filePath)) {
            return "";
        }
        
        // 统一使用正斜杠
        String normalized = filePath.replace("\\", "/");
        
        // 去掉开头的斜杠
        if (normalized.startsWith("/")) {
            normalized = normalized.substring(1);
        }
        
        // 去掉结尾的斜杠
        if (normalized.endsWith("/")) {
            normalized = normalized.substring(0, normalized.length() - 1);
        }
        
        return normalized;
    }

    /**
     * 构建头像文件路径（用于上传时指定目录）
     *
     * @param userId 用户ID
     * @return 头像目录路径
     */
    public static String buildAvatarPath(Long userId) {
        return "avatar/" + (userId != null ? userId : "anonymous");
    }

    /**
     * 检查文件是否为图片类型
     *
     * @param fileName 文件名
     * @return true表示是图片文件
     */
    public static boolean isImageFile(String fileName) {
        return FileTypeUtils.isImageFile(fileName);
    }
}
